'use strict';

const Controller = require('egg').Controller;

class ArticleController extends Controller {
	/**
	 * 分页查询用户数据  返回 { page , list}对象
	 */
	async list() {
		const { ctx } = this;
		// 获取用户的分页信息
		const { page, title, categoryId } = ctx.request.body;
		if (!page) {
			page = {
				currentPage: 1,
				pageNumber: 10
			};
		}
		// 调用服务查询数据
		const result = await this.service.admin.article.list(
			{
				title,
				categoryId
			},
			page
		);
		this.ctx.success(result);
	}

	/**
	 * 根据id获取文章的基本信息
	 */
	async getArticleInfoById() {
		const { ctx } = this;
		// 在URL上获取动态路由数据
		const { id } = ctx.params;
		if (!id) {
			// 没有token则表示未登录
			ctx.failure(null, '用户id获取不到', 100001);
			return;
		}
		// 调用服务查询数据
		const user = await this.service.admin.article.info(id);
		// 未获取到用户的基本数据
		if (!user) {
			// 没有token则表示未登录
			ctx.failure(null, '未查询到此用户', 100002);
			return;
		}
		this.ctx.success(user);
	}

	/**
	 * 根据id删除此用户
	 */
	async deleteArticleInfoById() {
		const { ctx } = this;
		// 在URL上获取动态路由数据
		const { id } = ctx.params;
		if (!id) {
			// 没有token则表示未登录
			ctx.failure(null, '用户id获取不到', 100001);
			return;
		}

		let transaction;
		try {
			transaction = await this.ctx.model.transaction();
			// 删除指定的文章
			const deleteArticleNumber = await this.service.admin.article.deleteArticleById(id);
			// 删除指定的文章有关的标签信息
			// const deleteTagsNumber = await this.service.admin.skillType.deleteSkillTypeBySkillId(id);
			// 提交事务
			transaction.commit();
			return this.ctx.success(
				{
					deleteArticleNumber
				},
				'删除成功'
			);
		} catch (error) {
			// 回滚事务
			await transaction.rollback();
			return this.ctx.failure(null, '删除文章信息失败请重试', 100011);
		}
	}

	/**
	 * 根据id获取用户的基本信息
	 */
	async updateArticleById() {
		debugger;
		const { ctx } = this;
		// 获取用户的分页信息
		const { id } = ctx.request.body;
		if (!id) {
			// 没有id不能修改用户的基本信息
			ctx.failure(null, '用户id获取不到', 100001);
			return;
		}

		let transaction;
		try {
			transaction = await this.ctx.model.transaction();
			// 删除指定的文章
			const updateArticle = await this.service.admin.article.updateArticleInfoById(ctx.request.body);
			// 提交事务
			transaction.commit();
			return this.ctx.success(
				{
					updateArticle
				},
				'修改文章信息成功'
			);
		} catch (error) {
			// 回滚事务
			await transaction.rollback();
			return this.ctx.failure(null, '修改文章信息失败', 100011);
		}
	}
}

module.exports = ArticleController;
